import { reqGetBaseUserInfo, reqGetProfile, reqLogin } from '@/api/user'
import { getToken, removeToken, setToken } from '@/utils/auth'
import { resetRouter } from '@/router'

const state = {
  // 一开始就要拿到token
  token: getToken() || '',
  userInfo: {}
}

const mutations = {
  setToken(state, newToken) {
    state.token = newToken
    setToken(newToken) // 与cooike存储进行同步
  },
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  // 清除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 删除退出 token两个 信息
  removerTokenn(state) {
    // 1.token清空
    state.token = ''
    // 2.cookie token清空
    removeToken()
  }
}

const actions = {
  // 通过登录拿到数据 并将token传送给state作为共享数据
  async Login(context, data) {
    const res = await reqLogin(data)
    // console.log(res)
    context.commit('setToken', res.data)

    // return new Promise((reslove, reject) => {
    //   reqLogin(data).then(res => {
    //     const token = res.data
    //     // console.log(res)
    //     context.commit('setToken', token)
    //     reslove(res)
    //   }).catch((err) => {
    //     reject(err)
    //   })
    // })
  },
  async getUserInfo(context) {
    // return new Promise((resolve, reject) => {
    //   reqGetProfile().then(res => {
    //     const { data } = res
    //     console.log(data)
    //     context.commit('setUserInfo', data)
    //     resolve(data)
    //   }).catch((err) => {
    //     reject(err)
    //   })
    // })
    // 合并带有头像的
    const { data: data1 } = await reqGetProfile()
    const { data: data2 } = await reqGetBaseUserInfo(data1.userId)
    const baseResult = {
      ...data1,
      ...data2
    }
    context.commit('setUserInfo', baseResult)
    // console.log(baseResult)
    return baseResult
  },
  // 退出清除token
  Lagout(context) {
    context.commit('removerTokenn')
    context.commit('removeUserInfo')
    // 3.重置路由
    resetRouter()
    // 4. 重置 vuex 中的路由信息
    context.commit('permission/setRoutes', [], { root: true })
  }
}

const getters = {

}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
